package GOrden.mobile;

import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


public class XmlParseOrdenes {

	private URL Url;

	public XmlParseOrdenes(String url) {
		try {
			this.Url = new URL(url);
		} catch (MalformedURLException e) {
			throw new RuntimeException(e);
		}
	}

	public List<Ordenes> parse() {
		// Instanciamos la fábrica para DOM
		//DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		List<Ordenes> ordenes = new ArrayList<Ordenes>();
		try {
			// Creamos un nuevo parser DOM
			String sXML = getStringXMLServer();
			
			//DocumentBuilder builder = factory.newDocumentBuilder();
			// Realizamos lalectura completa del XML
			Document dom = XMLfromString(sXML);
			
			// Nos posicionamos en el nodo principal del árbol (<rss>)
			Element root = dom.getDocumentElement();
			// Localizamos todos los elementos <item>
			NodeList items = root.getElementsByTagName("item");
			// Recorremos la lista de noticias
			for (int i = 0; i < items.getLength(); i++) {
				Ordenes orden = new Ordenes();
				// Obtenemos la noticia actual
				Node item = items.item(i);
				// Obtenemos la lista de datos de la noticia actual
				NodeList datosNoticia = item.getChildNodes();
				// Procesamos cada dato de la noticia
				for (int j = 0; j < datosNoticia.getLength(); j++) {
					Node dato = datosNoticia.item(j);
					String etiqueta = dato.getNodeName();
					if (etiqueta.equals("orden")) {
						orden.setOrden(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getOrden());
					} else if (etiqueta.equals("nic")) {
						orden.setNic(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getNic());
					} else if (etiqueta.equals("nis")) {
						orden.setNis(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getNis());
					} else if (etiqueta.equals("cliente")) {
						orden.setCliente(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getCliente());
					} else if (etiqueta.equals("direccion")) {
						orden.setDireccion(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getDireccion());
					/*}else if (etiqueta.equals("dir_referencia")) {
						orden.setDir_referencia(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getDir_referencia());*/
					}else if (etiqueta.equals("tipo")) {
						orden.setTipo(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getTipo());
					}else if (etiqueta.equals("cod_tipo")) {
						orden.setCod_tipo(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getCod_tipo());
					}else if (etiqueta.equals("departamento")) {
						orden.setDepartamento(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getDepartamento());
					}else if (etiqueta.equals("municipio")) {
						orden.setMunicipio(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getMunicipio());
					}else if (etiqueta.equals("deuda")) {
						orden.setDeuda(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getDeuda());
					}else if (etiqueta.equals("marca")) {
						orden.setMarca(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getMarca());
					}else if (etiqueta.equals("barrio")) {
						orden.setBarrio(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getBarrio());
					}else if (etiqueta.equals("facturas")) {
						orden.setFacturas(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getFacturas());
					}else if (etiqueta.equals("confirm")) {
						orden.setConfirm(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getConfirm());
					}else if (etiqueta.equals("medidor")) {
						orden.setMedidor(dato.getFirstChild().getNodeValue());
						System.out.println(orden.getMedidor());
					}
				}
				ordenes.add(orden);
			}
		} catch (Exception ex) {
			//throw new RuntimeException(ex);
			System.out.println(ex.getMessage());
		}
		System.out.println("Total ordenes: " + ordenes.size());
		return ordenes;
	}

	private String getStringXMLServer() {
		try {
			InputStream is = Url.openConnection().getInputStream();
			String line = null;
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					is, "utf-8"));
			StringBuilder sb = new StringBuilder();
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			System.out.println(sb.toString());
			
			return sb.toString();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
	public Document XMLfromString(String xml){

		Document doc = null;

		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	        try {

			DocumentBuilder db = dbf.newDocumentBuilder();

			InputSource is = new InputSource();
		        is.setCharacterStream(new StringReader(xml));
		        doc = db.parse(is); 

			} catch (ParserConfigurationException e) {
				System.out.println("XML parse error: " + e.getMessage());
				return null;
			} catch (SAXException e) {
				System.out.println("Wrong XML file structure: " + e.getMessage());
	            return null;
			} catch (IOException e) {
				System.out.println("I/O exeption: " + e.getMessage());
				return null;
			}

	        return doc;

		}

}
